﻿Public Class Usuarios

    Private Const ConnectionString As String = "Data Source=LUIFER-PC\LUIFER;Initial Catalog=Banco;Integrated Security=True"

    Function Listar() As List(Of Banco.BE.Usuarios)

        Dim lista As New List(Of Banco.BE.Usuarios)

        Dim conexion As New SqlClient.SqlConnection
        conexion.ConnectionString = ConnectionString

        Dim comando As New SqlClient.SqlCommand
        comando.Connection = conexion
        comando.CommandType = CommandType.StoredProcedure
        comando.CommandText = "UsuariosListar"

        Dim lector As SqlClient.SqlDataReader

        Try
            conexion.Open()
            lector = comando.ExecuteReader()

            If lector.HasRows Then
                While lector.Read
                    Dim usuario As New BE.Usuarios
                    usuario.Id = CInt(lector.GetValue(0)) 'num value es el num de columna
                    usuario.NombreCompleto = lector.GetValue(1).ToString
                    usuario.Identificacion = lector.GetValue(2).ToString
                    usuario.NombreUsuario = lector.GetValue(3).ToString
                    usuario.Contrasena = "******"
                    usuario.PerfilUsuario = CInt(lector.GetValue(5))
                    usuario.Estado = CInt(lector.GetValue(6))
                    usuario.FechaCreacion = CDate(lector.GetValue(7))
                    lista.Add(usuario)
                End While
            End If
        Catch ex As Exception
            Throw New Exception("Problemas al listar")
        Finally
            conexion.Close()
        End Try

        Return lista

    End Function

    Sub Agregar(ByVal mantenimiento As BE.Usuarios)

        Dim conexion As New SqlClient.SqlConnection
        Dim comando As New SqlClient.SqlCommand

        Try

            conexion.ConnectionString = ConnectionString

            comando.Parameters.Add(New SqlClient.SqlParameter("NombreCompleto", mantenimiento.NombreCompleto))
            comando.Parameters.Add(New SqlClient.SqlParameter("Identificacion", mantenimiento.Identificacion))
            comando.Parameters.Add(New SqlClient.SqlParameter("NombreUsuario", mantenimiento.NombreUsuario))
            comando.Parameters.Add(New SqlClient.SqlParameter("Contraseña", mantenimiento.Contrasena))
            comando.Parameters.Add(New SqlClient.SqlParameter("Perfil", mantenimiento.PerfilUsuario))
            comando.Parameters.Add(New SqlClient.SqlParameter("Estado", mantenimiento.Estado))

            conexion.Open()

            comando.CommandText = "UsuariosAgregar"
            comando.CommandType = CommandType.StoredProcedure
            comando.Connection = conexion
            comando.ExecuteNonQuery()
            conexion.Close()

        Catch Ex As Exception
            Throw New Exception("Problemas al Insertar en la Bd" & Ex.ToString)
        Finally
            If conexion.State <> ConnectionState.Closed Then
                conexion.Close()
            End If
        End Try

    End Sub

    Function Editar(ByVal mantenimiento As BE.Usuarios) As Boolean
        Dim conexion As SqlClient.SqlConnection = New SqlClient.SqlConnection()
        Dim comando As SqlClient.SqlCommand = New SqlClient.SqlCommand()

        Try
            conexion.ConnectionString = ConnectionString

            comando.Parameters.Add(New SqlClient.SqlParameter("Id", mantenimiento.Id))
            comando.Parameters.Add(New SqlClient.SqlParameter("NombreCompleto", mantenimiento.NombreCompleto))
            comando.Parameters.Add(New SqlClient.SqlParameter("Identificacion", mantenimiento.Identificacion))
            comando.Parameters.Add(New SqlClient.SqlParameter("NombreUsuario", mantenimiento.NombreUsuario))
            comando.Parameters.Add(New SqlClient.SqlParameter("Contraseña", mantenimiento.Contrasena))
            comando.Parameters.Add(New SqlClient.SqlParameter("Perfil", mantenimiento.PerfilUsuario))

            conexion.Open()

            comando.CommandText = "UsuariosEditar"
            comando.CommandType = CommandType.StoredProcedure
            comando.Connection = conexion
            comando.ExecuteNonQuery()
            conexion.Close()

        Catch Ex As Exception
            Throw New Exception("Problemas al Editar en la Bd" & Ex.ToString)
            Return False
        Finally
            If conexion.State <> ConnectionState.Closed Then
                conexion.Close()
            End If
        End Try

        Return True
    End Function

    Function Estado(ByVal id As Integer, ByVal accion As Integer) As Boolean
        Dim conexion As SqlClient.SqlConnection = New SqlClient.SqlConnection()
        Dim comando As SqlClient.SqlCommand = New SqlClient.SqlCommand()

        Try
            conexion.ConnectionString = ConnectionString

            comando.Parameters.Add(New SqlClient.SqlParameter("Id", id))

            If accion = 1 Then '1 - hab , 0 - inhab
                comando.Parameters.Add(New SqlClient.SqlParameter("Estado", BE.Estado.Habilitado))
            Else
                comando.Parameters.Add(New SqlClient.SqlParameter("Estado", BE.Estado.Inhabilitado))
            End If

            conexion.Open()

            comando.CommandText = "UsuariosEstado"
            comando.CommandType = CommandType.StoredProcedure
            comando.Connection = conexion
            comando.ExecuteNonQuery()
            conexion.Close()

        Catch Ex As Exception
            Throw New Exception("Problemas en la Bd" & Ex.ToString)
            Return False
        Finally
            If conexion.State <> ConnectionState.Closed Then
                conexion.Close()
            End If
        End Try

        Return True
    End Function

    Function Obtener(ByVal id As Integer) As BE.Usuarios
        Dim conexion As SqlClient.SqlConnection = New SqlClient.SqlConnection()
        Dim comando As SqlClient.SqlCommand = New SqlClient.SqlCommand()
        Dim lector As SqlClient.SqlDataReader
        Dim resultado As BE.Usuarios = Nothing

        Try
            conexion.ConnectionString = ConnectionString

            conexion.Open()

            comando.CommandText = "UsuariosObtener"
            comando.CommandType = CommandType.StoredProcedure
            comando.Connection = conexion

            comando.Parameters.Add(New SqlClient.SqlParameter("Id", id))

            lector = comando.ExecuteReader()

            If lector.HasRows Then
                Do While lector.Read()
                    resultado = New BE.Usuarios
                    resultado.Id = CInt(lector.GetValue(0)) 'num value es el num de columna
                    resultado.NombreCompleto = lector.GetValue(1).ToString
                    resultado.Identificacion = lector.GetValue(2).ToString
                    resultado.NombreUsuario = lector.GetValue(3).ToString
                    resultado.Contrasena = lector.GetValue(4).ToString
                    resultado.PerfilUsuario = CInt(lector.GetValue(5))
                    resultado.Estado = CInt(lector.GetValue(6))
                    resultado.FechaCreacion = CDate(lector.GetValue(7))
                Loop

            End If

            lector.Close()

        Catch Ex As Exception
            Throw New Exception("Problemas al Obtener" & Ex.ToString)
        Finally

            If conexion.State <> ConnectionState.Closed Then
                conexion.Close()
            End If
        End Try

        Return resultado
    End Function

    Function Filtrar(ByVal accion As Integer, ByVal texto As String) As List(Of Banco.BE.Usuarios)

        Dim lista As New List(Of Banco.BE.Usuarios)

        Dim conexion As New SqlClient.SqlConnection
        conexion.ConnectionString = ConnectionString

        Dim comando As New SqlClient.SqlCommand
        comando.Connection = conexion
        comando.CommandType = CommandType.StoredProcedure

        If accion = 1 Then
            comando.CommandText = "FiltrarUsuariosActivos"
        End If
        If accion = 2 Then
            comando.CommandText = "FiltrarUsuariosInactivos"
        End If
        If accion = 3 Then
            comando.CommandText = "FiltrarIdentificacion"
            comando.Parameters.Add(New SqlClient.SqlParameter("Texto", texto))
        End If
        If accion = 4 Then
            comando.CommandText = "FiltrarNombreCompleto"
            comando.Parameters.Add(New SqlClient.SqlParameter("Texto", texto))
        End If

        Dim lector As SqlClient.SqlDataReader

        Try
            conexion.Open()
            lector = comando.ExecuteReader()

            If lector.HasRows Then
                While lector.Read
                    Dim usuario As New BE.Usuarios
                    usuario.Id = CInt(lector.GetValue(0)) 'num value es el num de columna
                    usuario.NombreCompleto = lector.GetValue(1).ToString
                    usuario.Identificacion = lector.GetValue(2).ToString
                    usuario.NombreUsuario = lector.GetValue(3).ToString
                    usuario.Contrasena = "******" 'lector.GetValue(4).ToString
                    usuario.PerfilUsuario = CInt(lector.GetValue(5))
                    usuario.Estado = CInt(lector.GetValue(6))
                    usuario.FechaCreacion = CDate(lector.GetValue(7))
                    lista.Add(usuario)
                End While
            End If
        Catch ex As Exception
            Throw New Exception("Problemas al Filtrar")
        Finally
            conexion.Close()
        End Try

        Return lista

    End Function

    Function Inicio(ByVal usuario As String, ByVal contrasena As String) As BE.Usuarios
        Dim conexion As SqlClient.SqlConnection = New SqlClient.SqlConnection()
        Dim comando As SqlClient.SqlCommand = New SqlClient.SqlCommand()
        Dim lector As SqlClient.SqlDataReader
        Dim resultado As BE.Usuarios = Nothing

        Try
            conexion.ConnectionString = ConnectionString

            conexion.Open()

            comando.CommandText = "UsuariosInicio"
            comando.CommandType = CommandType.StoredProcedure
            comando.Connection = conexion

            comando.Parameters.Add(New SqlClient.SqlParameter("NombreUsuario", usuario))
            comando.Parameters.Add(New SqlClient.SqlParameter("Contraseña", contrasena))

            lector = comando.ExecuteReader()

            If lector.HasRows Then
                Do While lector.Read()
                    resultado = New BE.Usuarios
                    resultado.Id = CInt(lector.GetValue(0)) 'num value es el num de columna
                    resultado.NombreCompleto = lector.GetValue(1).ToString
                    resultado.Identificacion = lector.GetValue(2).ToString
                    resultado.NombreUsuario = lector.GetValue(3).ToString
                    resultado.Contrasena = lector.GetValue(4).ToString
                    resultado.PerfilUsuario = CInt(lector.GetValue(5))
                    resultado.Estado = CInt(lector.GetValue(6))
                    resultado.FechaCreacion = CDate(lector.GetValue(7))
                Loop

            End If

            lector.Close()

        Catch Ex As Exception
            Throw New Exception("Problemas al iniciar" & Ex.ToString)
        Finally

            If conexion.State <> ConnectionState.Closed Then
                conexion.Close()
            End If
        End Try

        Return resultado
    End Function

End Class
